M98 P"0:/user/xy_square_manual.g"
M98 P"0:/user/xy_square_mode.g"

if !exists(global.xy_square_manual)
  global xy_square_manual = 0.0

if !exists(global.xy_square_mode)
  global xy_square_mode = "manual"

set global.xy_square_mode = "manual"

var step = 0.1
var limit = 2.0
var epsilon = 0.0001

var current = global.xy_square_manual
if var.current >= (var.limit - var.epsilon)
  echo "Manual XY squaring offset already at +"^{var.limit}^"mm (clockwise limit)."
  M99

var newValue = var.current + var.step
if var.newValue > var.limit
  set var.newValue = var.limit

var scaled = (var.newValue * 10) + 0.5
set var.newValue = floor(var.scaled) / 10

set global.xy_square_manual = var.newValue

echo >"0:/user/xy_square_manual.g" "if exists(global.xy_square_manual)"
echo >>"0:/user/xy_square_manual.g" "  set global.xy_square_manual = " ^ var.newValue
echo >>"0:/user/xy_square_manual.g" "else"
echo >>"0:/user/xy_square_manual.g" "  global xy_square_manual = " ^ var.newValue

echo >"0:/user/xy_square_mode.g" "if exists(global.xy_square_mode)"
echo >>"0:/user/xy_square_mode.g" "  set global.xy_square_mode = ""manual"""
echo >>"0:/user/xy_square_mode.g" "else"
echo >>"0:/user/xy_square_mode.g" "  global xy_square_mode = ""manual"""

echo "Mode changed to manual. XY squaring offset adjusted clockwise to "^{var.newValue}^"mm and saved."